using System;
using System.Collections.Generic;
using TestClassesForConcepts;
using TestClassesForConcepts.Sample3;

concept C1[T] 
{
    require T <: T;
}

concept C2[T, S, U, V] 
{
    type A1;
    type A2 >: SE1<A1, KeyS>;
    type A3 == A2;
    //require A1 <: A2;
    //require A3 <: SG1<A1>;
}

concept C3[S, T, U]
{
    type A1 >: KD1<U>;
    require A1 <: KA;
    
    type B1 <: KB;
    require KF1<T, B1> <: KE1<KD1<U>>;
    require B1 >: A1;

    type B2 <: PA;
    //require B2 <: B1;
}

concept C4[T, S, U] 
{
    type A1 >: KH1<QB>;
    //require A1 <: KF1<QB, QA>;
    require A1 <: KF1<QB, PA>;

    type A2 >: KH1<QC>;
    //type A2 >: KH1<QB>;
    //require A2 <: KF1<S, QA>;
    require A2 <: KF1<S, U>;
    //require A1 <: KF1<S, U>;
}